//
// Created by Jisam on 2024/6/29.
//
#include <iostream>
#include <iomanip>
#include <vector>

using namespace std;

void printPermutations(vector<int>& nums, vector<int>& used, vector<int>& permutation, int n) {
    if (permutation.size() == n) {
        for (int num : permutation) {
            cout << setw(5) << num ;
        }
        cout << endl;
        return;
    }

    for (int i = 0; i < n; i++) {
        if (used[i]) continue; // 如果数字已经被使用，则跳过
        used[i] = true; // 标记数字为已使用
        permutation.push_back(nums[i]); // 将数字添加到排列中
        printPermutations(nums, used, permutation, n); // 递归处理下一个位置
        used[i] = false; // 回溯，撤销数字的使用标记
        permutation.pop_back(); // 回溯，撤销数字的添加
    }
}

int main() {
    int n;
    cin >> n;
    vector<int> nums(n);
    vector<int> used(n, false);
    vector<int> permutation;

    for (int i = 0; i < n; i++) {
        nums[i] = i + 1;
    }

    printPermutations(nums, used, permutation, n);

    return 0;
}